package utils

import (
	"crypto/md5"
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"log"
	rand2 "math/rand"
	"mime/multipart"
	"os"
	"path"
	"time"
)

//定义参数
//文件路径
var filePath string
var size string
func init()  {
	//读取yaml配置文件
	viper.SetConfigName("application")
	//设置配置文件目录的搜索目录
	viper.AddConfigPath("./config/")
	//读取
	if err := viper.ReadInConfig(); err != nil {
		if _ ,ok := err.(viper.ConfigFileNotFoundError); ok {
			log.Println("no such config file")
		}else {
			log.Println("read config error")
		}
		log.Fatal(err) //读取配置文件的致命错误
	}
	filePath = viper.GetString(`go.url`)
	size = viper.GetString("go.size")
}

//判断文件夹是否存在
func PathExitsts(path string) (bool,error){
	_, err := os.Stat(path)
	if err != nil {
		return false,nil
	}
	return true,nil
}

//生成6位随机数
func GetRandom()string{
	rnd :=rand2.New(rand2.NewSource(time.Now().UnixNano()))
	return string(rnd.Int31n(1000000))
}
//md5加密
func Md5one(str string)(md5str string){
	data := []byte(str + GetRandom())
	has := md5.Sum(data)
	md5str = fmt.Sprintf("%x",has)
	return
}
//文件上传
func FileUpload(file *multipart.FileHeader,c *gin.Context)(string,error){
	//获取今天的目录
	now := time.Now()
	time := now.Format("/2006/01/02/")
	filepath := filePath + time//再次强调一次  这个是固定格式
	flag, _ := PathExitsts(filepath)
	//目录不存在
	if flag==false  {
		//err 为空 就代表创建成功！
		err := os.MkdirAll(filepath,os.ModePerm)
		if err != nil {
			fmt.Printf("mkdirAll failed![%v]\n", err)
			return "",err
		}
	}
	//获取文件后缀
	suffix := path.Ext(file.Filename)
	fmt.Println(suffix)
	//修改文件名称
	file.Filename = Md5one(string(now.Unix()))
	err := c.SaveUploadedFile(file,filepath + file.Filename + suffix)
	if err != nil {
		return "",err
	}
	fileName := "/profile" + time + "/" + file.Filename + suffix
	return fileName,nil
}